Pressidian
花园入口
笔记
项目
关于
实验室
GitHub
花园入口
笔记
项目
关于
实验室
GitHub

KNOWLEDGE PATHS

笔记库
当前位置
笔记库/前端/面试/八股/TS

First

1 分钟阅读 · Note

目录树 578 篇

            • any、unknown 和 never
            • as const
            • First
          • 进阶篇题目列表
          • DOM&浏览器 API
          • HTTP&网络
          • TS
          • Vue
        • 可投递企业
      • 前端技术栈
    • 笔记目录
    • CLAUDE.md
    • Vue 组件与 Render 函数

关联笔记 6

↗any、unknown 和 never同一路径↗as const同一路径↗1基础篇共同主题↗2进阶篇共同主题↗4手写篇共同主题↗5AI面试共同主题
  • First

First

实现一个函数first(),其返回值类型是其输入的数组或元组的第一个类型

简单实现

// 使用泛型 T 约束输入必须是至少包含一个元素的元组或数组
function first<T extends readonly unknown[]>(arr: T): T[0] {
  if (arr.length === 0) {
    throw new Error("Cannot get the first element of an empty array");
  }
  return arr[0];
}

在 TypeScript 中,可以直接通过 T[0] 来获取数组的第一个元素类型。结合条件类型判断是否为空数组即可:

// 直接利用 T[0] 提取,比 infer 更直观
type First<T extends any[]> = T extends [] ? never : T[0];

function first<T extends readonly unknown[]>(arr: [...T]): First<[...T]> | undefined {
    return arr[0] as any; 
}

你也可以通过检查数组的 length 属性来判断是否为空,这种方式与上面的逻辑类似,但换了一种特判角度:

// 通过 length 属性特判空数组
type First<T extends any[]> = T['length'] extends 0 ? never : T[0];